%module BWAPI
%{
#include "BWAPI.h"
%}

%include "BWAPI/Vectorset.h"
%include "BWAPI/Type.h"

%define VSET_WRAP(t)
%template(t ## set_Base) BWAPI::Vectorset<BWAPI::t*>;
%enddef

VSET_WRAP(Bullet)
VSET_WRAP(Unit)
VSET_WRAP(Player)
VSET_WRAP(Region)
VSET_WRAP(Force)

%template(Color_Base) BWAPI::Type<BWAPI::Color,255>;
%rename(Text_Enum) BWAPI::Text::Enum;

%define COLOR_WRAP(n)
%rename(Color_ ## n) BWAPI::Colors::n;
%enddef

COLOR_WRAP(Yellow)
COLOR_WRAP(White)
COLOR_WRAP(Grey)
COLOR_WRAP(Red)
COLOR_WRAP(Green)
COLOR_WRAP(Blue)
COLOR_WRAP(Teal)
COLOR_WRAP(Purple)
COLOR_WRAP(Orange)
COLOR_WRAP(Brown)
COLOR_WRAP(Cyan)


%rename(CoordinateType_Enum) BWAPI::CoordinateType::Enum;
%rename(Flag_Enum) BWAPI::Flag::Enum;
%rename(Latency_Enum) BWAPI::Latency::Enum;


%define TYPEVAL_WRAP(t,v)
%rename(t ## _ ## v) BWAPI::t ## s::v;
%rename(t ## _Enum_ ## v) BWAPI::t ## s::Enum::v;
%enddef

%define TYPE_WRAP(t)
%template(t ## _Base) BWAPI::Type<BWAPI::t,BWAPI::t ## s::Enum::Unknown>;
TYPEVAL_WRAP(t,None)
TYPEVAL_WRAP(t,Unknown)
TYPEVAL_WRAP(t,MAX)
%rename(t ## _ ## init) BWAPI::t ## s::init;
%rename(t ## _ ## Enum) BWAPI::t ## s::Enum::Enum;

TYPEVAL_WRAP(t,Normal)
TYPEVAL_WRAP(t,Ensnare)
TYPEVAL_WRAP(t,Yamato_Gun)
TYPEVAL_WRAP(t,Consume)
TYPEVAL_WRAP(t,Melee)
TYPEVAL_WRAP(t,Unused)
TYPEVAL_WRAP(t,Neutral)
TYPEVAL_WRAP(t,PlayerLeft)
TYPEVAL_WRAP(t,RescuePassive)
TYPEVAL_WRAP(t,Burrowing)
TYPEVAL_WRAP(t,Dark_Swarm)
TYPEVAL_WRAP(t,Irradiate)
TYPEVAL_WRAP(t,Plague)
TYPEVAL_WRAP(t,Psionic_Storm)
TYPEVAL_WRAP(t,Parasite)
TYPEVAL_WRAP(t,Stasis_Field)
TYPEVAL_WRAP(t,Restoration)
TYPEVAL_WRAP(t,EMP_Shockwave)
TYPEVAL_WRAP(t,Stop)
TYPEVAL_WRAP(t,Train)
TYPEVAL_WRAP(t,Follow)
TYPEVAL_WRAP(t,Patrol)
TYPEVAL_WRAP(t,Move)
TYPEVAL_WRAP(t,Upgrade)
TYPEVAL_WRAP(t,Unload)
TYPEVAL_WRAP(t,Cloak)
TYPEVAL_WRAP(t,Decloak)
TYPEVAL_WRAP(t,Maelstrom)
TYPEVAL_WRAP(t,Optical_Flare)
TYPEVAL_WRAP(t,Feedback)
TYPEVAL_WRAP(t,Mind_Control)
TYPEVAL_WRAP(t,Disruption_Web)
TYPEVAL_WRAP(t,Lockdown)
TYPEVAL_WRAP(t,Nuclear_Strike)
TYPEVAL_WRAP(t,Corrosive_Acid)
TYPEVAL_WRAP(t,Subterranean_Spines)
TYPEVAL_WRAP(t,Halo_Rockets)
TYPEVAL_WRAP(t,Neutron_Flare)
TYPEVAL_WRAP(t,Pulse_Cannon)
TYPEVAL_WRAP(t,Phase_Disruptor)
TYPEVAL_WRAP(t,Seeker_Spores)
TYPEVAL_WRAP(t,Glave_Wurm)
TYPEVAL_WRAP(t,Acid_Spore)
TYPEVAL_WRAP(t,Longbolt_Missile)
TYPEVAL_WRAP(t,Burst_Lasers)
TYPEVAL_WRAP(t,Gemini_Missiles)
TYPEVAL_WRAP(t,Spider_Mines)
TYPEVAL_WRAP(t,Fragmentation_Grenade)
TYPEVAL_WRAP(t,Fusion_Cutter_Hit)
TYPEVAL_WRAP(t,Optical_Flare_Grenade)
TYPEVAL_WRAP(t,Independent)
TYPEVAL_WRAP(t,Unit_Does_Not_Exist)
TYPEVAL_WRAP(t,Terran_Marine)
TYPEVAL_WRAP(t,Spawn_Broodlings)
TYPEVAL_WRAP(t,Hellfire_Missile_Pack)
TYPEVAL_WRAP(t,Twin_Autocannons_Floor_Trap)
TYPEVAL_WRAP(t,Independant_Laser_Battery)
TYPEVAL_WRAP(t,Warp_Blades_Zeratul)
TYPEVAL_WRAP(t,Warp_Blades_Hero)
TYPEVAL_WRAP(t,Scarab)
TYPEVAL_WRAP(t,STS_Photon_Cannon)
TYPEVAL_WRAP(t,STA_Photon_Cannon)
TYPEVAL_WRAP(t,Phase_Disruptor_Cannon_Danimoth)
TYPEVAL_WRAP(t,Phase_Disruptor_Cannon)
TYPEVAL_WRAP(t,Anti_Matter_Missiles)
TYPEVAL_WRAP(t,Anti_Matter_Missiles_Artanis)
TYPEVAL_WRAP(t,Anti_Matter_Missiles_Mojo)
TYPEVAL_WRAP(t,Dual_Photon_Blasters)
TYPEVAL_WRAP(t,Dual_Photon_Blasters_Artanis)
TYPEVAL_WRAP(t,Dual_Photon_Blasters_Mojo)
TYPEVAL_WRAP(t,Psionic_Shockwave_TZ_Archon)
TYPEVAL_WRAP(t,Psionic_Shockwave)
TYPEVAL_WRAP(t,Psi_Assault)
TYPEVAL_WRAP(t,Phase_Disruptor_Fenix)
TYPEVAL_WRAP(t,Phase_Disruptor)
TYPEVAL_WRAP(t,Psi_Blades_Fenix)
TYPEVAL_WRAP(t,Psi_Blades)
TYPEVAL_WRAP(t,Particle_Beam)
TYPEVAL_WRAP(t,Suicide_Scourge)
TYPEVAL_WRAP(t,Suicide_Infested_Terran)
TYPEVAL_WRAP(t,Subterranean_Tentacle)
TYPEVAL_WRAP(t,Glave_Wurm_Kukulza)
TYPEVAL_WRAP(t,Glave_Wurm)
TYPEVAL_WRAP(t,Acid_Spore_Kukulza)
TYPEVAL_WRAP(t,Acid_Spore)
TYPEVAL_WRAP(t,Spines)
TYPEVAL_WRAP(t,Toxic_Spores)
TYPEVAL_WRAP(t,Kaiser_Blades_Torrasque)
TYPEVAL_WRAP(t,Needle_Spines_Hunter_Killer)
TYPEVAL_WRAP(t,Kaiser_Blades)
TYPEVAL_WRAP(t,Needle_Spines)
TYPEVAL_WRAP(t,Claws_Infested_Kerrigan)
TYPEVAL_WRAP(t,Claws_Devouring_One)
TYPEVAL_WRAP(t,Claws)
TYPEVAL_WRAP(t,Arclite_Shock_Cannon_Edmund_Duke)
TYPEVAL_WRAP(t,Arclite_Shock_Cannon)
TYPEVAL_WRAP(t,Flame_Thrower_Gui_Montag)
TYPEVAL_WRAP(t,Flame_Thrower)
TYPEVAL_WRAP(t,ATA_Laser_Battery)
TYPEVAL_WRAP(t,ATA_Laser_Battery_Hero)
TYPEVAL_WRAP(t,ATA_Laser_Battery_Hyperion)
TYPEVAL_WRAP(t,ATS_Laser_Battery)
TYPEVAL_WRAP(t,ATS_Laser_Battery_Hero)
TYPEVAL_WRAP(t,ATS_Laser_Battery_Hyperion)
TYPEVAL_WRAP(t,Burst_Lasers_Tom_Kazansky)
TYPEVAL_WRAP(t,Burst_Lasers)
TYPEVAL_WRAP(t,Gemini_Missiles_Tom_Kazansky)
TYPEVAL_WRAP(t,Gemini_Missiles)
TYPEVAL_WRAP(t,Fusion_Cutter)
TYPEVAL_WRAP(t,Arclite_Cannon_Edmund_Duke)
TYPEVAL_WRAP(t,Arclite_Cannon)
TYPEVAL_WRAP(t,Hellfire_Missile_Pack_Alan_Schezar)
TYPEVAL_WRAP(t,Hellfire_Missile_Pack)
TYPEVAL_WRAP(t,C_10_Canister_Rifle)
TYPEVAL_WRAP(t,C_10_Canister_Rifle_Sarah_Kerrigan)
TYPEVAL_WRAP(t,C_10_Canister_Rifle_Samir_Duran)
TYPEVAL_WRAP(t,C_10_Canister_Rifle_Infested_Duran)
TYPEVAL_WRAP(t,C_10_Canister_Rifle_Alexei_Stukov)
TYPEVAL_WRAP(t,Gauss_Rifle)
TYPEVAL_WRAP(t,Gauss_Rifle_Jim_Raynor)
TYPEVAL_WRAP(t,Hellfire_Missile_Pack_Floor_Trap)
TYPEVAL_WRAP(t,Flame_Thrower_Wall_Trap)
TYPEVAL_WRAP(t,Hellfire_Missile_Pack_Wall_Trap)
TYPEVAL_WRAP(t,Warp_Blades)
TYPEVAL_WRAP(t,Twin_Autocannons_Alan_Schezar)
TYPEVAL_WRAP(t,Twin_Autocannons)
TYPEVAL_WRAP(t,Fragmentation_Grenade_Jim_Raynor)
TYPEVAL_WRAP(t,Fragmentation_Grenade)
TYPEVAL_WRAP(t,Charon_Boosters)
TYPEVAL_WRAP(t,Anabolic_Synthesis)
TYPEVAL_WRAP(t,Chitinous_Plating)
TYPEVAL_WRAP(t,Caduceus_Reactir)
TYPEVAL_WRAP(t,Argus_Talisman)
TYPEVAL_WRAP(t,Argus_Jewel)
TYPEVAL_WRAP(t,Khaydarin_Core)
TYPEVAL_WRAP(t,Carrier_Capacity)
TYPEVAL_WRAP(t,Gravitic_Thrusters)
TYPEVAL_WRAP(t,Apial_Sensors)
TYPEVAL_WRAP(t,Khaydarin_Amulet)
TYPEVAL_WRAP(t,Gravitic_Boosters)
TYPEVAL_WRAP(t,Sensor_Array)
TYPEVAL_WRAP(t,Gravitic_Drive)
TYPEVAL_WRAP(t,Reaver_Capacity)
TYPEVAL_WRAP(t,Scarab_Damage)
TYPEVAL_WRAP(t,Leg_Enhancements)
TYPEVAL_WRAP(t,Singularity_Charge)
TYPEVAL_WRAP(t,Metasynaptic_Node)
TYPEVAL_WRAP(t,Gamete_Meiosis)
TYPEVAL_WRAP(t,Grooved_Spines)
TYPEVAL_WRAP(t,Muscular_Augments)
TYPEVAL_WRAP(t,Adrenal_Glands)
TYPEVAL_WRAP(t,Metabolic_Boost)
TYPEVAL_WRAP(t,Antennae)
TYPEVAL_WRAP(t,Ventral_Sacs)
TYPEVAL_WRAP(t,Colossus_Reactor)
TYPEVAL_WRAP(t,Apollo_Reactor)
TYPEVAL_WRAP(t,Moebius_Reactor)
TYPEVAL_WRAP(t,Ocular_Implants)
TYPEVAL_WRAP(t,Titan_Reactor)
TYPEVAL_WRAP(t,Ion_Thrusters)
TYPEVAL_WRAP(t,U_238_Shells)
TYPEVAL_WRAP(t,Protoss_Plasma_Shields)
TYPEVAL_WRAP(t,Protoss_Air_Weapons)
TYPEVAL_WRAP(t,Protoss_Ground_Weapons)
TYPEVAL_WRAP(t,Zerg_Flyer_Attacks)
TYPEVAL_WRAP(t,Zerg_Missile_Attacks)
TYPEVAL_WRAP(t,Zerg_Melee_Attacks)
TYPEVAL_WRAP(t,Terran_Ship_Weapons)
TYPEVAL_WRAP(t,Terran_Vehicle_Weapons)
TYPEVAL_WRAP(t,Terran_Infantry_Weapons)
TYPEVAL_WRAP(t,Protoss_Air_Armor)
TYPEVAL_WRAP(t,Protoss_Ground_Armor)
TYPEVAL_WRAP(t,Zerg_Flyer_Carapace)
TYPEVAL_WRAP(t,Zerg_Carapace)
TYPEVAL_WRAP(t,Terran_Ship_Plating)
TYPEVAL_WRAP(t,Terran_Vehicle_Plating)
TYPEVAL_WRAP(t,Terran_Infantry_Armor)
TYPEVAL_WRAP(t,Repair)
TYPEVAL_WRAP(t,Attack_Move)
TYPEVAL_WRAP(t,Stim_Packs)
TYPEVAL_WRAP(t,Zerg)
TYPEVAL_WRAP(t,Pneumatized_Carapace)
TYPEVAL_WRAP(t,Caduceus_Reactor)
TYPEVAL_WRAP(t,Player)
%enddef

TYPE_WRAP(BulletType)
TYPE_WRAP(DamageType)
TYPE_WRAP(Error)
TYPE_WRAP(ExplosionType)
TYPE_WRAP(GameType)
TYPE_WRAP(Order)
TYPE_WRAP(PlayerType)
TYPE_WRAP(Race)
TYPE_WRAP(TechType)
TYPE_WRAP(UnitCommandType)
TYPE_WRAP(UnitSizeType)
TYPE_WRAP(UnitType)
TYPE_WRAP(UpgradeType)
TYPE_WRAP(WeaponType)

%rename(Text_Invisible) BWAPI::Text::Invisible;


%include "BWAPI.h"
